iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
IoT

制霸IoT 30Day!系列 第 16

Day 16 圖表(二)

  • 分享至 

  • xImage
  •  

圖表資料

今天介紹有了儀表板平台,那所儲存資料因該如何存?除了一般 MySQL,Microsoft SQL Server,PostgreSQL 之外。

InfluxDB

InfluxDB

InfluxDB

InfluxDB是一個由 InfluxData 開發的開源時序型資料庫 time series database (TSDB)。它由 Go 寫成,著力於高性能地查詢與存儲時序型數據。
因為是 Go 寫成可以跨平台速度快資料有壓縮等特點。

  • InfluxDB 在技術實現上充分利用了 Go 語言的特性,無需任何外部依賴即可獨立部署。
  • InfluxDB 提供了一個類似於 SQL 的查詢語言並且一系列內置函數方便用戶進行數據查詢。
  • InfluxDB 存儲的數據從邏輯上由 Measurement, tag 組以及 field 組以及一個時間戳組成的:
    • Measurement: 由一個字符串表示該條記錄對應的含義。比如它可以是監控數據"cpu_load",也可以是測量數據"average_temperature"
    • tag 組: 由一組鍵值對組成,表示的是該條記錄的一系列屬性信息。同樣的 measurement 數據所擁有的 tag 組不一定相同,它是無模式的(Schema-free)。tag 信息是默認被索引的。
    • field 組:也是由一組鍵值對組成,表示的是該條記錄具體的 value 信息(有名稱)。field 組中可定義的 value 類型包括:64 位整型,64 位浮點型,字符串以及布爾型。Field 信息是無法被索引的。
    • 時間戳:就是該條記錄的時間屬性。如果插入數據時沒有明確指定時間戳,則默認存儲在資料庫中的時間戳則為該條記錄的入庫時間。
  • InfluxDB 支持基於 HTTP 的數據插入與查詢。同時也接受直接基於 TCP 或 UDP 協議的連接。
  • InfluxDB 允許用戶定義數據保存策略(Retention Policies)來實現對存儲超過指定時間的數據進行刪除或者降採樣。

InfluxDB 啟動與使用

這裡我們一樣使用 Dockr 來做使用。

先建立目錄 influxdb 存放 influxdb 的資料。

  • 預設 admin 管理員帳號密碼
  • 預設建立資料庫 db0
  • 預設建立使用者 telegraf 帳號密碼
$ mkdir influxdb
$ cd influxdb
$ docker run --rm \
      -e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
      -e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=admin \
      -e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=telegraf \
      -v /home/pi/influxdb:/var/lib/influxdb \
      influxdb /init-influxdb.sh

執行結果:

pi@ras2:~/influxdb $ docker run -d --name=influxdb \
>       -e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
>       -e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=admin \
>       -e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=telegraf \
>       -v /home/pi/influxdb:/var/lib/influxdb \
>       influxdb /init-influxdb.sh
Unable to find image 'influxdb:latest' locally
latest: Pulling from library/influxdb
cc2e500f6b65: Pull complete
2e6cdcabf7c2: Pull complete
2ab3d8012daa: Pull complete
733644d1c82a: Pull complete
3f1bf43e236d: Pull complete
27603cef2713: Pull complete
9ecab9f3d7f0: Pull complete
9b7a13772d5a: Pull complete
Digest: sha256:f0b7acde2d7fa215576a9f83abbf363b6f5641896535a01dbaf62299ab2272f9
Status: Downloaded newer image for influxdb:latest
4268d7b41e9b43ef7b723917ee5bccf45452a6f4737277d3a71a6c738ef8346b
pi@ras2:~/influxdb $

剛剛只是籲先建立不是真正的執行。
現在來啟動!

$ docker run -d --name=influxdb \
      -e INFLUXDB_ADMIN_ENABLED=true \
      -e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=admin \
      -p 8086:8086 \
      -p 8083:8083 \
      -p 2003:2003 \
      -v /home/pi/influxdb:/var/lib/influxdb \
      influxdb

執行結果:

pi@ras2:~/influxdb $ docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                                                                                                          NAMES
7e7d4e25875e        influxdb                             "/entrypoint.sh infl…"   7 minutes ago       Up 7 minutes        0.0.0.0:2003->2003/tcp, 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp                                                         influxdb
97cad68c9dac        grafana/grafana                      "/run.sh"                5 hours ago         Up 5 hours          0.0.0.0:3000->3000/tcp                                                                                                         grafana
479698322a6d        emqx/emqx:v3.2.3-alpine3.9-arm32v7   "/usr/bin/docker-ent…"   24 hours ago        Up 24 hours         4369/tcp, 5369/tcp, 6369/tcp, 8080/tcp, 8083-8084/tcp, 8883/tcp, 0.0.0.0:1883->1883/tcp, 0.0.0.0:18083->18083/tcp, 11883/tcp   emqx
pi@ras2:~/influxdb $

InfluxDB

InfluxDB 資料庫設定 按下 Save & Test

Mqtt 傳入 InfluxDB

我們的圖表 Grafana 已經有了資料庫但是沒有資料所以現在就只剩資料的寫入這項作業。
一般來說會要你寫程式想辦法從 MQTT 接收資料,再把收到資料寫入 InfluxDB 其中還會遇到很多問題。
跟你說不用!!現在介紹一套超強的資料收集與輸出工具!Telegraf與 InfluxDB 一樣是 influxdata 公司所開源的套件。
Telegraf

Telegraf

直接定義好輸入輸出即可!
這裡就是我的設定檔 telegraf.conf

[[inputs.mqtt_consumer]]
  ## MQTT broker URLs to be used. The format should be scheme://host:port,
  ## schema can be tcp, ssl, or ws.
  servers = ["tcp://192.168.0.51:1883"]

  ## Topics that will be subscribed to.
  topics = [
    "home/#",
  ]
  data_format = "value"
  data_type = "float"
[[outputs.influxdb]]
  urls = ["http://192.168.0.51:8086"]

  database = "db0"

  username = "telegraf"
  password = "telegraf"

數入重點部分就是這個設定可以參考連結。

https://docs.influxdata.com/telegraf/v1.12/data_formats/input/
data_format = "value"
https://docs.influxdata.com/telegraf/v1.12/data_formats/input/value/
data_type = "integer"

那我們直接使用 Docker 啟動。

docker run -d --name=telegraf \
 -v \$PWD/telegraf.conf:/etc/telegraf/telegraf.conf:ro \
 arm32v7/telegraf

Grafana 儀表板設定

這邊就看圖說故事。

![dashboard]https://ithelp.ithome.com.tw/upload/images/20191001/20120588EEouSLqXnp.png

Dashboard 新增一個 Query 如果資料順利進來,如果資料順利進來,WHERE 後面指結可以點選到我們設定的資料。現在點選溫度。

dashboard

Dashboard 設定 左方點選中間圖示設定樣式。中間輸入標題與單位,右邊輸入區段顏色是不是很簡單啊。

dashboard

Dashboard 新增一個 Query 後面直接可以點選到我們設定的資料。現在點選濕度。

dashboard

Dashboard 設定 左方點選中間圖示設定樣式。中間輸入標題與單位,右邊輸入區段顏色。

dashboard

Dashboard 新增一個 Query 後面直接可以點選到我們設定的資料。現在點選溫度。

dashboard

Dashboard 設定 左方點選中間圖示設定樣式。中間輸入標題與單位。

dashboard

Dashboard 新增一個 Query 後面直接可以點選到我們設定的資料。現在點選濕度。

dashboard

Dashboard 設定 左方點選中間圖示設定樣式。中間輸入標題與單位。

最後呈現!
dashboard

Dashboard 設定

結語

今天介紹 Grafana 與 InfluxDB 還有 Telegraf 這樣的組合完美演繹了精美儀表板!是不是與之前開源的平台差很多呢!。

Blog 同步刊登


上一篇
Day 15 圖表(一)
下一篇
Day 17 藍芽偵測使用
系列文
制霸IoT 30Day!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言